﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ProjControleModelos;

namespace ProjControleDAL
{
   public class ProdutosDAL
    {
        SqlCommand cmd;
       Dados objD = null;
       #region Construtor
       public ProdutosDAL()
       {
           //construtor
       }
       #endregion
       #region Métodos
       //inserir
       public void inserir(Produtos objP)
       {
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();//@cod_marca,@cod_grupo,@cod_interno,
               cmd.CommandText = "insert into produto values (@descricao,@qtd_prod,@preco_venda," +
                   "@cod_marca,@cod_grupo,@cod_interno,@preco_compra,@dt_compra,@comissao,@qtd_minima,@status, "+
                   "@destaque_produto,@img_produto,@info_produto)";

               cmd.Parameters.Add(new SqlParameter("@cod_marca", SqlDbType.Int)).Value = objP.cod_marca;
               cmd.Parameters.Add(new SqlParameter("@cod_grupo", SqlDbType.Int)).Value = objP.cod_grupo;
               cmd.Parameters.Add(new SqlParameter("@cod_interno", SqlDbType.VarChar)).Value = objP.cod_interno_prod;
               cmd.Parameters.Add(new SqlParameter("@descricao", SqlDbType.VarChar)).Value = objP.descricao_produto;
               cmd.Parameters.Add(new SqlParameter("@preco_compra", SqlDbType.Float)).Value = objP.preco_compra;
               cmd.Parameters.Add(new SqlParameter("@comissao", SqlDbType.Float)).Value = objP.comissao;
               cmd.Parameters.Add(new SqlParameter("@qtd_prod", SqlDbType.Int)).Value = objP.qntd_produto;
               cmd.Parameters.Add(new SqlParameter("@dt_compra", SqlDbType.Date)).Value = objP.dt_compra;
               cmd.Parameters.Add(new SqlParameter("@preco_venda", SqlDbType.Float)).Value = objP.preco_venda;
               cmd.Parameters.Add(new SqlParameter("@qtd_minima", SqlDbType.Int)).Value = objP.qntd_minima;
               cmd.Parameters.Add(new SqlParameter("@status", SqlDbType.VarChar)).Value = objP.status_produto;
               cmd.Parameters.Add(new SqlParameter("@destaque_produto", SqlDbType.Char)).Value = "S";
               cmd.Parameters.Add(new SqlParameter("@img_produto", SqlDbType.VarChar)).Value = "";
               cmd.Parameters.Add(new SqlParameter("@info_produto", SqlDbType.Text)).Value = "Informação";
               objP.cod_produto = objD.executaComandoAI(cmd, "produto");
           }
           catch (Exception ex)
           { 
               throw ex;
           }
           cmd = null;
           objD = null;
       }
       //alterar
       public void alterar(Produtos objP)
       {
           cmd = new SqlCommand();
           objD = new Dados();
           try
           {
               cmd.CommandText = "update produto set cod_marca = @cod_marca,cod_grupo = @cod_grupo,cod_interno_prod = @cod_interno,descricao_produto = @descricao, " +
                   "preco_compra_prod = @preco_compra,qtd_prod = @qtd_prod,dt_compra_prod = @dt_compra,comissao_produto = @comissao,preco_venda = @preco_venda,qntd_minima = @qtd_minima," +
                   " status_produto = @status where cod_produto = @cod";
               cmd.Parameters.Add(new SqlParameter("@cod_marca", SqlDbType.Int)).Value = objP.cod_marca;
               cmd.Parameters.Add(new SqlParameter("@cod_grupo", SqlDbType.Int)).Value = objP.cod_grupo;
               cmd.Parameters.Add(new SqlParameter("@cod_interno", SqlDbType.VarChar)).Value = objP.cod_interno_prod;
               cmd.Parameters.Add(new SqlParameter("@descricao", SqlDbType.VarChar)).Value = objP.descricao_produto;
               cmd.Parameters.Add(new SqlParameter("@preco_compra", SqlDbType.Decimal)).Value = objP.preco_compra;
               cmd.Parameters.Add(new SqlParameter("@comissao", SqlDbType.Float)).Value = objP.comissao;
               cmd.Parameters.Add(new SqlParameter("@qtd_prod", SqlDbType.Int)).Value = objP.qntd_produto;
               cmd.Parameters.Add(new SqlParameter("@dt_compra", SqlDbType.Date)).Value = objP.dt_compra;
               cmd.Parameters.Add(new SqlParameter("@preco_venda", SqlDbType.Decimal)).Value = objP.preco_venda;
               cmd.Parameters.Add(new SqlParameter("@qtd_minima", SqlDbType.Int)).Value = objP.qntd_minima;
               cmd.Parameters.Add(new SqlParameter("@status", SqlDbType.VarChar)).Value = objP.status_produto;
               cmd.Parameters.Add(new SqlParameter("@cod", SqlDbType.Int)).Value = objP.cod_produto;
               objD.executaComando(cmd);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objD = null;
       }
       //excluir
       public void excluir(Produtos objP)
       {
          
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "delete from produto where cod_produto = @cod";
               cmd.Parameters.Add(new SqlParameter("@cod", SqlDbType.Int)).Value = objP.cod_produto;
               objD.executaComando(cmd);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objD = null;
       }
       //localizar pelo codigo
       public Produtos localizar(int cod)
       {
           Produtos objP = null;
           DataTable tab;
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "select * from produto where cod_produto = @cod";
               cmd.Parameters.Add(new SqlParameter("@cod", SqlDbType.Int)).Value = cod;
               tab = objD.executaConsulta(cmd);
               if(tab != null)
                   if (tab.Rows.Count == 1)
                   {
                       //carrega o construtor
                       objP = new Produtos(cod,
                           int.Parse(tab.Rows[0]["cod_marca"].ToString()),
                           int.Parse(tab.Rows[0]["cod_grupo"].ToString()),
                           tab.Rows[0]["cod_interno_prod"].ToString(),
                           tab.Rows[0]["descricao_produto"].ToString(),
                           Double.Parse(tab.Rows[0]["preco_compra_prod"].ToString()),
                           Double.Parse(tab.Rows[0]["comissao_produto"].ToString()),
                           int.Parse(tab.Rows[0]["qtd_prod"].ToString()),
                           DateTime.Parse(tab.Rows[0]["dt_compra_prod"].ToString()),
                           Double.Parse(tab.Rows[0]["preco_venda"].ToString()),
                           int.Parse(tab.Rows[0]["qntd_minima"].ToString()),
                           tab.Rows[0]["status_produto"].ToString());
                   }
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objD = null;
           return objP;
       }
       //localizar pelo nome
       public DataTable localizar(String descricao)
       {
           
           DataTable tab;
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "select * from produto where descricao_produto like @descricao order by descricao_produto";
               cmd.Parameters.Add(new SqlParameter("@descricao", SqlDbType.VarChar)).Value = "%" + descricao + "%";
               tab = objD.executaConsulta(cmd);
           }
           catch (Exception ex)
           {
               throw ex;
           }
           cmd = null;
           objD = null;
           return tab;
       }
       #endregion
    }
}
